package org.Modulo1;

import java.sql.ResultSet;
import java.util.ArrayList;
import javax.swing.JOptionPane;

public final class GestorClientes {

    //Lista con todos los clientes
    private static ArrayList<Cliente> listaClientes = new ArrayList<Cliente>();

    /**
     * ****************************************************************
     ** Crea un objeto cliente con los parametros pasados al metodo, ** * lo
     * añade a la lista de clientes y lo guarda en la BBDD **
     *****************************************************************
     */
    /*public static void darAlta(String nombre, String apellido, String CIF, String direccion, String establecimiento, String telefono){
     Cliente c = new Cliente(nombre, apellido, CIF, direccion, establecimiento, telefono);
     listaClientes.add(c);
     guardarClienteBBDD(nombre, apellido, CIF, direccion, establecimiento, telefono);
     }*/
    /**
     * ************************************************************************
     ** Devuelve un Array de String con todos los nombres y apellidos de los **
     * * clientes **
     *************************************************************************
     */
    public static String[] devolverNomClientes() {
        String[] clientes = new String[listaClientes.size()];
        for (int i = 0; i < listaClientes.size(); i++) {
            clientes[i] = (listaClientes.get(i).getApellido() + ", " + listaClientes.get(i).getNombre());
        }

        return clientes;
    }

    /**
     * *****************************************************************
     ** Devuelve un Array de String con todos los CIF de los clientes ** **
     ******************************************************************
     */
    public static String[] devolverCIFClientes() {

        String[] clientes = new String[listaClientes.size()];
        for (int i = 0; i < listaClientes.size(); i++) {
            clientes[i] = listaClientes.get(i).getCIF();
        }

        return clientes;
    }

    /**
     * *************************************************************************
     ** Carga los clientes de la BBDD, crea Objetos con sus datos y los añade
     * ** * a la listaClientes **
     **************************************************************************
     */
    public static void cargarClientesBBDD() {
        String SQL_select = "SELECT * FROM Clientes";
        Cliente aux;
        listaClientes = new ArrayList<Cliente>();
        String nombre, apellido, cif, direccion, establecimiento, telefono;
        int id = 0;
        try {
            ResultSet resultado = Agente.select(SQL_select);
            while (resultado.next()) {
                id=resultado.getInt(1);
                nombre = resultado.getString(4);
                apellido = resultado.getString(3);
                cif = resultado.getString(2);
                direccion = resultado.getString(6);
                establecimiento = resultado.getString(5);
                telefono = resultado.getString(7);
                aux = new Cliente(id, nombre, apellido, cif, direccion, establecimiento, telefono);
                listaClientes.add(aux);
            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al cargar los clientes : " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }
    }

    /**
     * ****************************************************************************
     ** Conecta con la BBDD, crea la sentencia insert con los datos del
     * cliente, ** * para guardarlos en la BBDD y ejecuta el metodo que realiza
     * el insert, ** * despues de desconecta la base de datos **
     *****************************************************************************
     */
    public static void darAlta(Cliente c) {
        String SQL_select = "INSERT INTO Clientes(CIF,Apellido,Nombre,Establecimiento,Direccion,TLFN) VALUES('" + c.getCIF() + "','" + c.getApellido() + "','" + c.getNombre() + "','" + c.getEstablecimiento() + "','" + c.getDireccion() + "','" + c.getTelefono() + "')";

        try {
            Agente.conectar();
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al cargar la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }

        try {
            Agente.insert(SQL_select);
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al insertar los datos en la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }

        try {
            Agente.desconectar();
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al desconectar la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }

    }

    public static void modCli(Cliente c) {
        String SQL_select = "UPDATE Clientes set CIF='" + c.getCIF() + "'WHERE ID=" + c.getId() + ";";
        String SQL_select2 = "UPDATE Clientes set Apellido='" + c.getApellido() + "'WHERE ID=" + c.getId() + ";";
        String SQL_select3 = "UPDATE Clientes set Nombre='" + c.getNombre() + "'WHERE ID=" + c.getId() + ";";
        String SQL_select4 = "UPDATE Clientes set Establecimiento='" + c.getEstablecimiento() + "'WHERE ID=" + c.getId() + ";";
        String SQL_select5 = "UPDATE Clientes set Direccion='" + c.getDireccion() + "'WHERE ID=" + c.getId() + ";";
        String SQL_select6 = "UPDATE Clientes set TLFN='" + c.getTelefono() + "'WHERE ID=" + c.getId() + ";";

        try {
            Agente.conectar();
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al cargar la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }

        try {
            Agente.insert(SQL_select);
            Agente.insert(SQL_select2);
            Agente.insert(SQL_select3);
            Agente.insert(SQL_select4);
            Agente.insert(SQL_select5);
            Agente.insert(SQL_select6);

        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al modificar los datos en la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }

        try {
            Agente.desconectar();
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al desconectar la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }
    }
    
    
    public static void eliCli(Cliente c) {
        String SQL_select = "DELETE FROM Clientes WHERE ID=" + c.getId() + ";";
        try {
            Agente.conectar();
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al cargar la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }

        try {
            Agente.insert(SQL_select);
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al eliminar los datos en la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }

        try {
            Agente.desconectar();
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al desconectar la BBDD: \n " + ex.getMessage(), "Error de conexión", JOptionPane.ERROR_MESSAGE);
        }
    }

    public static ArrayList<Cliente> getListaClientes() {
        return listaClientes;
    }

}
